package pers.cz.flowcell;

import java.util.List;
import java.util.Map;

/**
 * @program: jef-flow-spring-boot-starter
 * @description: Jef节点接口
 * @author: Cheng Zhi
 * @create: 2023-02-12 15:24
 **/
public interface JefFlowCell {

    /**
     * 获取当前节点的唯一ID.
     * @return
     */
    public Integer getId();

    /**
     * 获取当前节点的名称
     * @return
     */
    public String getName();

    /**
     * 获取节点名称，用来和运行逻辑节点映射
     * @return
     */
    public String getFlowNodeName();

    /**
     * 为节点设置自定义参数，通常用于上游节点为下游节点传递自定义内容。
     * @param params
     */
    public void setParams(Map<String, Object> params);

    /**
     * 获取节点自定义参数，通常用于获取上游节点传递给下游节点的内容
     * @return
     */
    public Map<String, Object> getParams();
    /**
     * 判断节点是否为开始节点
     * @return
     */
    public Boolean isStart();

    /**
     * 判断当前节点是否存在下游节点
     * @return
     */
    public boolean hasNext();

    /**
     * 获取当前节点的下一个节点
     * @return
     */
    public List<JefFlowCell> getNextCell();

    /**
     * 获取所有上游节点编号
     * @return
     */
    public List<Integer> getUpstreamNode();

    /**
     * 判断当前节点是否存在多个上游节点
     * @return
     */
    public boolean hasManyUpstreamMode();

    /**
     * 获取该节点中自定义的字节的内容
     * 例如：
     * <jefFlowCell>
     *     <myCustomizeData test1="a" test2="b" test3="c" ....></myCustomizeData>
     * </jefFlowCell>
     * @return
     */
    public Map<String, Object> getCustomizeData();
}
